今天工作的时候遇到要解析表情,先把最后解决的结果贴上来
/**解析内容,将内容中的表情进行替换*@param: Contens 要处理的字符串*@param: arrFaceList 表情数据*@param: webRoot 处理完显示的图片目录级别*/function replaceFace(Contens, arrFaceList, webRoot) { $.each(arrFaceList.JDataList, function (i, faces) { var faceName = eval("/\\[" + faces.ExpressionName + "]/ig"); var replaceHtml = "" Contens = Contens.replace(faceName, replaceHtml); }); return Contens;}
我遇到的问题:1、js里的replace方法跟c#里的不一样,Js里的只替换第一个匹配项,而C#里匹配所有的匹配项。 解决办法:用正则表达式匹配。正则中有个配置参数g是global全局匹配。ig是ignore case忽略大小写的全局匹配2、接下来的问题是中括号是正则里的特殊符号,怎么办? 解决办法:将前中括号[加转义字符\,注意,后中括号]不用加。见下面资料3、可是正则表达式中有变量该怎么办呢? 解决办法:用eval()方法来连接字符串。4、为什么还是不行? 解决办法:转义字符要写两次,因为在字符串"/\\["里的单斜杠本身也需要转义。
资料:正则表达式中的特殊字符(需要转义)
- ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
- $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
- . 匹配除换行符 \n 之外的任何单字符。要匹配 .,请使用 \。
- \ 将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
- | 指明两项之间的一个选择。要匹配 |,请使用 \|。
- { 标记限定符表达式的开始。要匹配 {,请使用 \{。
- [ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
- ( 和 ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
- * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
- + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
- ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
- PS:我的淘宝店铺新开业,经营各种桌游,棋牌,希望大伙儿能来看看!http://201314yes.taobao.com/